using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using PMServiceDesk.BusinessLogic;
using PMServiceDesk.DataType;
using PMServiceDesk.Utils.Interfaz;
using PMServiceDesk.Parameters.Constantes;

namespace PMServiceDesk.Web.AppCode
{
    public class DocumentoPaqueteTrabajoView
    {
        public List<DocumentoPaqueteTrabajoType> DocumentoPaqueteTrabajos { get; set; }
        public int TotalRegistros { get; set; }
        public DocumentoPaqueteTrabajoType DocumentoPaqueteTrabajo { get; set; }
        public bool NuevoRegistro { get; set; }
    }

    public class DocumentoPaqueteTrabajoIU
    {
        public static List<DocumentoTransicionEstadoType> ListarTransicion(string paqueteTrabajoId,string estadoOrigenId, string estadoDestinoId)
        {
            DocumentoTransicionEstadoLogic logic = new DocumentoTransicionEstadoLogic();

            return logic.CargarTransicion(paqueteTrabajoId,estadoOrigenId, estadoDestinoId, Sesion.Usuario.RolId);
        }

        public static string AdjuntarTransicion(DocumentoTransicionEstadoType registro)
        {
            DocumentoPaqueteTrabajoType d = new DocumentoPaqueteTrabajoType();
            DocumentoDigitalType dd = new DocumentoDigitalLogic().CargarVistaPorId(registro.DocumentoDigitalId);

            d.EstadoPaqueteTrabajoOrigenId = registro.EstadoPaqueteTrabajoOrigenId;
            d.EstadoPaqueteTrabajoDestinoId = registro.EstadoPaqueteTrabajoDestinoId;
            d.FechaRegistro = DateTime.Now;
            d.NombreArchivo = dd.FileName;
            d.PaqueteTrabajoId = registro.PaqueteTrabajoId;
            d.DocumentoDigitalId = registro.DocumentoDigitalId;
            d.UsuarioRegistroId = Sesion.Usuario.Id;

            new DocumentoPaqueteTrabajoLogic().Grabar(d);

            SoporteLogic.RegistrarTransicionDocumentos(registro.Id, d.Id);

            return "";
        }

        public static DocumentoPaqueteTrabajoView Listar(DocumentoPaqueteTrabajoType registroBusqueda, int paginaActual, int cantidadMostrar, string orderBy)
        {
            DocumentoPaqueteTrabajoLogic logic = new DocumentoPaqueteTrabajoLogic();

            DocumentoPaqueteTrabajoView view = new DocumentoPaqueteTrabajoView();

            view.DocumentoPaqueteTrabajos = logic.CargarExploradorPaginado(registroBusqueda, paginaActual, cantidadMostrar, orderBy);
            view.TotalRegistros = view.DocumentoPaqueteTrabajos.Capacity;

            return view;
        }

        public static string ExportarExcel(DocumentoPaqueteTrabajoType registroBusqueda, List<GridJSONField> gridFields)
        {
            DocumentoPaqueteTrabajoLogic logic = new DocumentoPaqueteTrabajoLogic();

            List<DocumentoPaqueteTrabajoType> l = logic.CargarExploradorPaginado(registroBusqueda);

            return InterfazUtils.FileTableHTMLGridJSON(l, gridFields, ArchivoConfig.FileServer, Sesion.Usuario.Usuario, "DocumentoPaqueteTrabajos", ExtensionesArchivos.Excel2003);
        }

        public static DocumentoPaqueteTrabajoView Cargar(string id)
        {
            DocumentoPaqueteTrabajoView view = new DocumentoPaqueteTrabajoView();

            if (id == null) return view;

            DocumentoPaqueteTrabajoLogic logic = new DocumentoPaqueteTrabajoLogic();

            view.DocumentoPaqueteTrabajo = logic.CargarPorId(id);

            return view;
        }

        public static DocumentoPaqueteTrabajoView Grabar(DocumentoPaqueteTrabajoType registro)
        {
            DocumentoPaqueteTrabajoView view = new DocumentoPaqueteTrabajoView();
            view.NuevoRegistro = (registro.Id == "0");

            DocumentoDigitalType documentoDigital = new DocumentoDigitalLogic().CargarVistaPorId(registro.DocumentoDigitalId);

            registro.NombreArchivo = documentoDigital.FileName;
            registro.UsuarioRegistroId = Sesion.Usuario.Id;
            registro.FechaRegistro = DateTime.Now;

            DocumentoPaqueteTrabajoLogic logic = new DocumentoPaqueteTrabajoLogic();
            logic.Grabar(registro);

            view.DocumentoPaqueteTrabajo = logic.CargarVistaPorId(registro.Id);

            return view;
        }

        public static string Eliminar(string id)
        {
            DocumentoPaqueteTrabajoLogic logic = new DocumentoPaqueteTrabajoLogic();
            logic.Eliminar(id);

            return id;
        }
    }
}
